home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cgraphix / kdrawln.c < prev    next >
Text File  |  1986-05-08  |  2KB  |  86 lines

  1. /* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» */
  2. #include    <stdio.h>
  3. #define    EXTERN    extern
  4. #include    <typedef.h>
  5.  
  6.  
  7. void DrawLineDirect(x1,y1,x2,y2)
  8. int        x1, y1, x2, y2;
  9. {
  10.     int         x, y, DeltaX, DeltaY, XStep, YStep, direction;
  11.  
  12.     x = x1;
  13.     y = y1;
  14.     XStep = 1;
  15.     YStep = 1;
  16.     if (x1 > x2)
  17.         XStep = -1;
  18.     if (y1 > y2)
  19.         YStep = -1;
  20.     DeltaX = iabs(x2-x1);
  21.     DeltaY = iabs(y2-y1);
  22.     if (DeltaX == 0)
  23.         direction = -1;
  24.     else
  25.         direction = 0;
  26.     while (!((x == x2) && (y == y2))) {
  27.         if (LineStyleGlb == 0)
  28.             DP(x,y);
  29.         else {
  30.             CntGlb = (CntGlb+1) & 7;
  31.             if (LineStyleArrayGlb[CntGlb])
  32.                 DP(x,y);
  33.         }
  34.         if (direction < 0) {
  35.           y += YStep;
  36.           direction += DeltaX;
  37.         }
  38.         else {
  39.           x += XStep;
  40.           direction -= DeltaY;
  41.         }
  42.     }
  43. }
  44.  
  45.  
  46. void DrawLine(x1, y1, x2, y2)
  47. double    x1, y1, x2, y2;
  48. {
  49.  
  50.     int        X1Loc, Y1Loc, X2Loc, Y2Loc;
  51.  
  52.     if (DirectModeGlb)
  53.         DrawLineDirect((int)x1, (int)y1, (int)x2, (int)y2);
  54.     else {
  55.         X1Loc = WindowX(x1);
  56.         Y1Loc = WindowY(y1);
  57.         X2Loc = WindowX(x2);
  58.         Y2Loc = WindowY(y2);
  59.         if (clip(&X1Loc, &Y1Loc, &X2Loc, &Y2Loc))
  60.             DrawLineDirect(X1Loc, Y1Loc, X2Loc, Y2Loc);
  61.     }
  62. }
  63.  
  64.  
  65. void DrawLineClipped(x1, y1, x2, y2)
  66. int        x1, y1, x2, y2;
  67. {
  68.     if (clip(&x1, &y1, &x2, &y2))
  69.         DrawLine((double)x1, (double)y1, (double)x2, (double)y2);
  70. }
  71.  
  72.  
  73. void DrawLinW(X1, Y1, X2, Y2, DirectModeLoc)
  74. int        X1, Y1, X2, Y2, DirectModeLoc;
  75. {
  76.     int        DrawIt;
  77.  
  78.     DrawIt = DirectModeLoc;
  79.     if (!DrawIt) {
  80.         DrawIt = clip(&X1, &Y1, &X2, &Y2);
  81.     }
  82.     if (DrawIt)
  83.         DrawLine((double)X1, (double)Y1, (double)X2, (double)Y2);
  84. }
  85.  
  86.